package inventoryServe.utils;

import com.alibaba.fastjson.JSONObject;
import org.apache.commons.mail.HtmlEmail;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * 通过QQ邮箱发送验证码
 */
public class EmailUtil {

    // 验证码长度
    private static Integer codeLen = 6;

    // 发送邮箱验证码的qq号
    private static String QQEmail="XXXXXXXX@qq.com";

     // 发件人名字
    private static String sender = "Rimuru";

     // 开启IMAP/SMTP服务获取的授权码
    private static String authPwd = "XXXXXXXXXXX";

     // 邮件的主题
    private static String subject="库存信息管理系统 验证码";


     // 邮件的内容
    private static String content="你好！验证码是 ";

    /**
     * 获取随机验证码
     * @return
     */
    public static String  getAuthCode() {  //由于数字0，1 和字母 o，l 有时分不清，所有没有数字0和1
        String[] strArr = new String[]{"2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F",
                "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a",
                "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
                "w", "x", "y", "z"};
        List list = Arrays.asList(strArr);//将数组转换为集合
        Collections.shuffle(list);  //打乱集合顺序
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < list.size(); i++) {
            stringBuilder.append(list.get(i)); //将集合转化为字符串
        }
        return stringBuilder.toString().substring(stringBuilder.length() - codeLen); //截取字符串为验证码长度
    }
    // 参数1：接收者的邮箱 sendToEamil，参数2：随机生成的验证码 authCode
    public static JSONObject sendAuthCodeEmail(String sendToEamil, String authCode){

        try {
            HtmlEmail send = new HtmlEmail();
            // 固定值，QQ邮箱服务
            send.setHostName("smtp.qq.com");
            // 固定值，QQ邮箱端口号
            send.setSmtpPort(465);
            send.setCharset("utf-8");
            send.setSSL(true);
            // 接收者的Eamil 都可以的只要是邮箱 qq 163 等
            send.addTo(sendToEamil);
            // 参数1：发送者的QQEamil，参数2：发送者显示名字
            send.setFrom(QQEmail, sender);
            // 参数1：发送者的QQEmail，参数2：第一步获取的授权码
            send.setAuthentication(QQEmail, authPwd);
            // 邮件标题
            send.setSubject(subject);
            // 邮件内容
            send.setMsg(content+authCode);
            send.send();
            return ResUtils.Success(1,"发送邮箱成功",authCode);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ResUtils.Success(0,"发送邮箱失败了");
    }
}
